import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)
/*
store：
  vuex必须要在一个单一实例中
state：
  存放数据的地方
  辅助 mapstate
    写在实例中computed
    语法：computed:{
      ...mapstate({

      })
    }
getters：
  存放过滤数据方法的地方
  辅助 mapgetters
    写在实例中computed
mutations：
  存放直接修改数据方法的地方
  辅助 mapmutations
    写在实例中的methods里
    存放同步代码
    调用 commit
actions：
  存放操作mutations方法的地方
  辅助 mapactions
    写在实例中的methods里
    存放异步代码
    调用 dispatch
modules：
  使store模块化，让每一个数据都有自己的getters、mutations、actions方便后续维护
*/
export default new Vuex.Store({
  state: {
    count:100,
    cart:[
      {name:"鼠标",price:23,color:"黄色",count:345,goodCommon:231},
      {name:"电脑",price:956,color:"绿色",count:134,goodCommon:23},
      {name:"键盘",price:32,color:"黑色",count:543,goodCommon:123},
      {name:"显示器",price:545,color:"黑色",count:234,goodCommon:43},
      {name:"显卡",price:532,color:"白色",count:231,goodCommon:212},
      {name:"CPU",price:432,color:"蓝色",count:221,goodCommon:231},
      {name:"液冷",price:234,color:"天蓝色",count:123,goodCommon:434}
    ],
    obj:{name:"鼠标",price:23,color:"黄色",count:345,goodCommon:231},
    news:[]
  },
  getters:{
    getPrice:state=>{
      return state.cart.filter(v=>v.price>300);
    },
    getTow:(state,getters)=>{
      return getters.getPrice.filter(v=>v.name==="显示器")
    },
    //传递参数
    getCS:state => name => {
      return state.cart.filter(V=>V.name===name)
    }
  },
  mutations: {
    countAdd(state,num){
      state.count+=num.num
    },
    setNews(state,news){
      console.log(news.data.result);
      state.news = news.data.result;
    }
  },
  actions: {
    resultNew(context){
      return new Promise((resolve,reject)=>{
        Vue.axios.post("https://api.it120.cc/liujiahe/cms/news/list/v2").then(response=>{
          context.commit("setNews",response.data)
        })
      })
    }
  },
  modules: {
  }
})
